package jdiy.sample.action;

import net.jdiy.core.*;

//招聘应聘栏目的Action
public class jobs extends JDiyAction {
    App app = App.get();//取得JDiy App上下文
    Dao dao = app.getDao(); //取得默认的数据库操作DAO对象(DataAccessObject)

    //招聘列表页的Action
    public void zhaopin() {
        //查询出招聘信息（招聘截止时间过了的不显示）
        //招聘信息列表这个页面是没有分页的（所有招聘信息全部显示在一个页面上）。如要分页显示，请参考留言列表的分页输出代码。
        Ls ls = dao.ls(new Args("jobs", "dateDiff(sysdate(), dtExp)<=0"));
        setAttr("jobsLs", ls); //将招聘信息Ls对象设置到request请求流中，并取名为jobsLs, 以便jsp页面输出

        forward("/WEB-INF/view/jobs/zhaopin.jsp"); //forward到展现层页面．即将request请求转交页面去输出。
    }

    //人才招聘栏目中的·[用人理念]，[办公环境]单篇文章输出的Action
    public void article() {
        Rs rs = dao.rs(new Args("info", "id='" + app.get("id") + "' AND isc=1"));//根据id查询出要显示的单篇内容（isc=1在树形表中用于指示它是一个节点）
        setAttr("article", rs); //将查询出来的这篇文章(rs对象)设置到请求流中，并取名为article，以便jsp页面输出

        forward("/WEB-INF/view/jobs/article.jsp");   //forward到展现层页面．即将request请求转交页面去输出。
    }

    //用户点击招聘信息底部的“我要应聘”后进入到应聘表单填写的页面.
    public void resume() {
        Rs rs = dao.rs(new Args("jobs", "id='" + app.get("jobsId") + "'"));//查询用户现在要应聘的是什么职位.
        setAttr("jobs", rs);//将招聘职位信息设置到请求流中，以便应聘表单要用到。

        //应聘表的主键是char(10)类型的。即:使用的是JDiy的主键生成器创建的主键。
        // 用这种主键的好处是可以在记录被插入到数据库之前就就生成主键值。对于要上传附件的数据表，用JDiy的这种主键有很大的好处哦～～
        setAttr("newId", Rs.newId());//这儿生成一个主键值，然后页面的应聘表单中会有一个隐藏域，它将作为应聘表单提交到数据库保存后的那条记录的主键。

        forward("/WEB-INF/view/jobs/resume.jsp"); //forward到展现层页面．即将request请求转交页面去输出。
    }

    //用户填了应聘表单后提交，将由这个Action处理保存.
    public void resume_save() {
        Rs rs = getRs("resume", "user");//获取页面post过来的应聘表数据，并自动封包成一个Rs对象。
        //注意：由于即将插入到resume表中的这条记录的主键是通过JDiy的主键生成器生成的
        // （在上面的resume()方法就生成了，然后在页面的应聘表单中有一个隐藏user.id）提交到了当前这个resume_save方法，
        //并通过上面这一行设置到了rs对象中，也就是说，这个rs还没有保存到数据库的时候，我们就己经知道它的id值是多少了。
        //而到了这个Action（即简历保存提交的时候）,它的主键就已经固定了（不会再改变），
        // 所以如果用户在这个提交保存的页面刷新一下，浏览器会弹出提示“是否重新提交”，虽然用户点“是”，
        // 也并不会出现"刷新一次,数据库中就会多出一条记录"的BUG(用其它框架的话，类似的情况，我想你懂的)！
        // 因为我们上面说了，在提交表单那个页面，就已经通过JDiy的主键生成器生成了id值并提交了到这个Action，
        // 所以无论用户在这个地方刷新多少次，它的主键值并没没改变！！
        // 而下面的dao.save(rs)方法，会根据主键值去自动地选择是insert还是update.
        //也就是说，当用户再次刷新的时候，其实JDiy是update了之前提交的这条记录（并不会产生重复数据）！！
        // 讲到这里，如果大家能弄明白的话，就知道用这种方式的表主键的好处了！
        // 另外说明一下，用char(10)类型的主键结合JDiy的主键生成器,这种类型的主键值是整库唯一的。
        // 用这种方式，您可以轻松地为一条记录set任意多个XML字段或文件上传的附件字段。而不必关心这些XML或文件是怎么存储的，
        //使用JDiy的Rs类的相关setX, getX, setF, getF方法，您可以像操作普通数据库字段那样读写XML/File类型的附加字段，非常方便。
        dao.save(rs);//保存应聘数据

        forward("/WEB-INF/view/jobs/resume_saved.jsp");//保存好后就forward到这个页面提示用户“您的应聘简历已经发送成功”
    }
}
